// license-header java merge-point
/**
 * This is only generated once! It will never be overwritten.
 * You can (and have to!) safely modify it by hand.
 */
package fr.upstlse.glre.business.service.user;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;

import fr.upstlse.glre.business.domain.user.Etudiant;
import fr.upstlse.glre.business.domain.user.EtudiantDao;
import fr.upstlse.glre.business.vo.user.EtudiantSearchCriteriaVO;
import fr.upstlse.glre.business.vo.user.EtudiantVO;

/**
 * @see fr.upstlse.glre.business.service.user.EtudiantService
 */
public class EtudiantServiceImpl
    extends fr.upstlse.glre.business.service.user.EtudiantServiceBase
{

	static Logger LOGGER = Logger.getLogger(EtudiantServiceImpl.class);
	@Override
	protected long handleCreateEtudiant(EtudiantVO pEtudiantVO)
			throws Exception {
		
		Etudiant lEtudiantEntity = getEtudiantDao().etudiantVOToEntity(pEtudiantVO);
		LOGGER.info("Adresse de étudiant entity " + lEtudiantEntity.getAdresse().getNumero());
		EtudiantVO lEtudiantVO = (EtudiantVO) getEtudiantDao().create(EtudiantDao.TRANSFORM_ETUDIANTVO, lEtudiantEntity);
		return lEtudiantVO.getId();
	}

	@Override
	protected void handleDeleteEtudiant(EtudiantVO etudiantVO) throws Exception {
		getEtudiantDao().remove(getEtudiantDao().etudiantVOToEntity(etudiantVO));		
	}

	@Override
	protected EtudiantVO[] handleGetAllEtudiants() throws Exception {
		Collection<EtudiantDao> lEtudiants = getEtudiantDao().loadAll(EtudiantDao.TRANSFORM_ETUDIANTVO);
		return lEtudiants.toArray(new EtudiantVO[lEtudiants.size()]);
	}

	@Override
	protected EtudiantVO handleGetById(long etudiantId) throws Exception {
		return (EtudiantVO) getEtudiantDao().load(EtudiantDao.TRANSFORM_ETUDIANTVO, etudiantId);
	}

	@Override
	protected List handleFindEtudiant(
			EtudiantSearchCriteriaVO pEtudiantSearchCriteriaVO) throws Exception {

		List<Etudiant> lEtudiants = getEtudiantDao().findByCriteria(pEtudiantSearchCriteriaVO);
		List<EtudiantVO> lEtudiantsVO = new ArrayList<EtudiantVO>();
		
		Iterator<Etudiant> lEtudiantIterator = lEtudiants.iterator();
		while(lEtudiantIterator.hasNext()) {
			lEtudiantsVO.add(getEtudiantDao().toEtudiantVO(lEtudiantIterator.next()));
		}
		
		return lEtudiantsVO;
	}

	@Override
	protected void handleUpdateEtudiant(EtudiantVO pEtudiantVO) throws Exception {
		Etudiant lEtudiant = getEtudiantDao().etudiantVOToEntity(pEtudiantVO);
		getEtudiantDao().update(lEtudiant);
	}

}